// import 'package:flutter_blue/flutter_blue.dart';
import 'dart:io';
import 'dart:ui';
import 'package:flutter/material.dart';
import 'dart:convert';
import 'dart:ui';
import 'package:flutter/material.dart';
import 'package:magic_car/common/global.dart';

import 'package:magic_car/util/HttpHelper.dart';
import 'package:shared_preferences/shared_preferences.dart';
import 'package:toast/toast.dart';
import 'package:magic_car/main.dart';
// import 'package:amap_location/amap_location.dart';
import 'package:permission_handler/permission_handler.dart';
class BluePage extends StatefulWidget {
  BluePage({Key key, this.title}) : super(key: key);

  final String title;

  @override
  _MyHomePageState createState() => new _MyHomePageState();
}

class _MyHomePageState extends State<BluePage> {
  List formList = [];
  // List<BluetoothDevice> devices = [];
  // bool startscan = false;
  // FlutterBlue flutterBlue = FlutterBlue.instance;
  // BluetoothDevice device;
  // //List code_arr = [];
  // String code_string;
  // int deviceindex;

  // BluetoothCharacteristic cread;
  // BluetoothCharacteristic cwrite;

  String sendCode = "ATZ";
  List codeList = [
    "ATZ",
    "ATL0",
    'ATE1',
    'ATH0',
    'ATSP0',
    'ATSP1',
    'ATSP2',
    'ATSP3',
    'ATSP4',
    'ATSP5',
    'ATSP6',
    'ATSP7',
    'ATSP8',
    'ATSP9'
  ];
  initState() {
    super.initState();
   
    startLcoations();
    // getLocationInfo();
  }

  int codeindex = 0;

  Widget buildcontent() {
    List<Widget> tiles = [];
    Widget content;
    if (formList.length > 0) {
      for (var i = 0; i < formList.length; i++) {
        var item = formList[i];
        tiles.add(Padding(
            padding: new EdgeInsets.fromLTRB(15, 15, 15, 0),
            child: Container(
              width: double.infinity - 20,
              decoration: new BoxDecoration(
                color: Colors.white,
              ),
              child: new GestureDetector(
                  behavior: HitTestBehavior.opaque,
                  onTap: () {
                    print('1212');
                    // device = devices[i];
                    // startconnetc(i);
                    // setState(() {
                    //   deviceindex = i;
                    // });
                  },
                  child: Column(
                    mainAxisAlignment: MainAxisAlignment.start,
                    crossAxisAlignment: CrossAxisAlignment.start,
                    children: <Widget>[
                      Padding(
                        padding: new EdgeInsets.fromLTRB(20, 15, 20, 10),
                        child: Column(
                          children: <Widget>[
                            Text(item["name"]),
                            Text(item['value'])
                          ],
                        ),
                      ),
                    ],
                  )),
            )));
      }
    }
    content = new Column(
        children: tiles //重点在这里，因为用编辑器写Column生成的children后面会跟一个<Widget>[]，
        //此时如果我们直接把生成的tiles放在<Widget>[]中是会报一个类型不匹配的错误，把<Widget>[]删了就可以了
        );
    return content;
  }
startLcoations() async {
    print('开始定位');

    Map<PermissionGroup, PermissionStatus> permissions =
        await PermissionHandler()
            .requestPermissions([PermissionGroup.location]);
    // 申请结果
    PermissionStatus permission = await PermissionHandler()
        .checkPermissionStatus(PermissionGroup.location);
    print('授权结果');
    if (permission == PermissionStatus.granted) {
      // print('授权成功');
      // AMapLocationClient.startup(new AMapLocationOption(
      //     desiredAccuracy:
      //         CLLocationAccuracy.kCLLocationAccuracyHundredMeters));
      // // AMapLocationClient.startLocation();
      // var geting = await AMapLocationClient.getLocation(true);
     // print(geting);
      // LatLng lat =
      //     new LatLng(geting.latitude.toDouble(), geting.longitude.toDouble());
      // ReGeocode reGeocodeList = await AmapSearch.searchReGeocode(
      //   lat,
      // );
      // print(await reGeocodeList.toFutureString());
      // String addresstemp = await reGeocodeList.formatAddress;
      // setState(() {
      //   address = "自动定位：" + addresstemp;
      // });

      // postBaiduLoaction(geting.latitude.toString(), geting.longitude.toString());
      //print(geting.longitude);
      //print(geting);
      //Toast.show('位置信息'+geting.longitude.toString(), context);
      //启动监听位置改变

    } else {
      print('授权失败');
    }
}
  change() {
    // Map<String, String> map = new Map();
    // map['str'] = "ATZ";

    // String api = HttpHelper.API_ChangeByte;

    // HttpHelper.post(api, (data) async {
    //   if (data != null) {
    //     print(data);
    //     Toast.show(data["msg"], context);

    //     // pref.setStringList('userinfo', data["info"]);

    //   }
    // }, params: map);
  }
  // getcodedesc() {
  //   formList[deviceindex]['value'] = '接收故障码：' + code_string;
  //   Map<String, String> map = new Map();
  //   map['code'] = code_string;

  //   String api = HttpHelper.API_GetTroubleCode;

  //   HttpHelper.post(api, (data) async {
  //     if (data != null) {
  //       print(data);
  //       Toast.show(data["msg"], context);
  //       if (data['code'].toString() == "1") {
  //         var str = '';
  //         for (int i = 0; i < data['info'].length; i++) {
  //           print(data['info'][i]['code']);
  //           str = str +
  //               '故障码：' +
  //               data['info'][i]['code'] +
  //               ',故障描述：' +
  //               data['info'][i]['descrble'] +
  //               '\r';
  //         }
  //         formList[deviceindex]['value'] = str;
  //         setState(() {
  //           formList = formList;
  //         });
  //       }

  //       // pref.setStringList('userinfo', data["info"]);

  //     }
  //   }, params: map);
  // }

  // //发送数据
  // writedata(str) async {
  //   List<int> b = Utf8Codec().encode(str + '\r');
  //   print('写入值$b');
  //   print('写入值转换：$str');
  //   await cwrite.write(b);
  // }

  // int num = 1;
  // startconnetc(index) async {
  //   await device.connect();

  //   setState(() {});

  //   List<BluetoothService> services = await device.discoverServices();
  //   services.forEach((service) async {
  //     // do something with service
  //     var characteristics = service.characteristics;
  //     for (BluetoothCharacteristic c in characteristics) {
  //       print('cuuid-------');
  //       print(c.uuid.toString());

  //       //List<int> b=Utf8Codec().encode('ATSP'+num.toString());
  //       //ATZ
  //       List<int> b = Utf8Codec().encode('ATZ\r\n');
  //       num = 1;
  //       if (c.uuid.toString() == "0000fff2-0000-1000-8000-00805f9b34fb") {
  //         cwrite = c;
  //         writedata(sendCode);
  //         // writedata('ATL0');
  //         // writedata('ATE1');
  //         // writedata('ATH0');
  //         // writedata('ATSP1');
  //         // writedata('ATSP2');
  //         // writedata('ATSP3');
  //         // writedata('ATSP4');
  //         // writedata('ATSP5');
  //         // writedata('ATSP6');
  //         // writedata('ATSP7');
  //         // writedata('ATSP8');
  //         // writedata('ATSP9');

  //       }
  //       if (c.uuid.toString() == "0000fff1-0000-1000-8000-00805f9b34fb") {
  //         await c.setNotifyValue(true);

  //         c.value.listen((value) async {
  //           var item = formList[index];

  //           print('接收值$value');
  //           // print(Utf8Codec().decode(value).toString());
  //           String recieve = Utf8Codec().decode(value).toString().trim();
  //           item['value'] = '发送指令$sendCode' + '接收值$recieve';
  //           print(recieve);

  //           if (sendCode == "ATZ") {
  //             if (recieve[0] == "E") {
  //               print('成功');
  //               sendCode = "ATL0";
  //               writedata(sendCode);
  //             } else {
  //               writedata(sendCode);
  //             }
  //           } else if (sendCode == "ATL0") {
  //             if (recieve[0] == "A") {
  //               print('ATL0成功');
  //               print(recieve[4]);
  //               sendCode = "ATE1";
  //               writedata(sendCode);
  //             } else {
  //               writedata(sendCode);
  //             }
  //           } else if (sendCode == "ATE1") {
  //             if (recieve[2] == "E") {
  //               print('ATE1成功');
  //               sendCode = "ATH0";
  //               writedata(sendCode);
  //             } else {
  //               writedata(sendCode);
  //             }
  //           } else if (sendCode == "ATH0") {
  //             if (recieve[2] == "H") {
  //               print('ATH0成功');
  //               sendCode = "ATSP1";
  //               writedata(sendCode);
  //             } else {
  //               writedata(sendCode);
  //             }
  //           } else if (sendCode == "ATSP" + num.toString()) {
  //             if (recieve.contains('OK')) {
  //               sendCode = "0100";
  //               writedata(sendCode);
  //             } else {
  //               if (num < 9) {
  //                 num++;
  //               } else {
  //                 num = 1;
  //               }
  //               sendCode = "ATSP" + num.toString();
  //               writedata(sendCode);
  //             }

  //             // if (recieve.length > 3 && recieve[4] == num.toString()) {
  //             //   print('ATSP1成功');
  //             //   sendCode = "0100";
  //             //   writedata(sendCode);
  //             // } else {
  //             //   writedata(sendCode);
  //             // }
  //           } else if (sendCode == "0100") {
  //             print('------最后检测协议-------$recieve');
  //             if (recieve.contains("41")) {
  //               // if (recieve.contains('OK')) {
  //               print('协议走通，协议为$num');

  //               List<int> b =[3];
  //               await cwrite.write(b);
  //              sendCode = '07';

  //               //  sendCode = "$sendCode";
  //              // writedata(sendCode);
  //             } else {
  //               if (num < 9) {
  //                 num++;
  //               } else {
  //                 num = 1;
  //               }
  //               sendCode = "ATSP" + num.toString();
  //               writedata(sendCode);
  //             }
  //           } else if (sendCode == "0101") {
  //             print('------故障代码个数返回值-------$recieve');
  //           } else if (sendCode.contains('03')) {
  //             print('------故障代码返回值-------$recieve');
  //           }else if (sendCode=='04') {
  //             print('------清楚故障代码返回值-------$recieve');
  //           }
  //           else if (sendCode=='07') {
  //             print('------07故障代码返回值-------$recieve');
  //           }
  //            else if (sendCode == "01") {
  //             print('------故障代码返回值01-------$recieve');
  //           } else if (sendCode == "0120") {
  //             //pid20-40
  //             if (recieve.contains("41")) {
  //               sendCode = "0140";
  //               writedata(sendCode);
  //             } else {
  //               // //继续查找40断的pid是否支持
  //               // sendCode = "0140";
  //               // writedata(sendCode);
  //             }
  //           } else if (sendCode == "0140") {
  //             if (recieve.contains("41")) {
  //               sendCode = "0160";
  //             }
  //             writedata(sendCode);
  //           } else if (sendCode == "0160") {
  //             if (recieve.contains("41")) {
  //               sendCode = "010D";
  //             }
  //             writedata(sendCode);
  //           } else if (sendCode == "010D") {
  //             print('010D 返回数据$recieve');
  //             if (recieve.contains("41")) {
  //               sendCode = "03";
  //             }
  //             writedata(sendCode);
  //           }
  //           // else if (sendCode == "0112") {
  //           //   print('------引擎转速返回值-------$recieve');
  //           // } else if (sendCode == "0140") {
  //           //   print('------0140返回值-------$recieve');
  //           //   if (recieve.contains("41")) {
  //           //   } else {
  //           //     sendCode = "0160";
  //           //     writedata(sendCode);
  //           //   }
  //           // } else if (sendCode == "0160") {
  //           //   print('------0160返回值-------$recieve');
  //           //   if (recieve.contains("41")) {
  //           //   } else {
  //           //     sendCode = "P0195";
  //           //     writedata(sendCode);
  //           //   }
  //           // } else if (sendCode == "P0195") {
  //           //   print('------0195返回值-------$recieve');
  //           // }
  //           // if(recieve!='4100'){
  //           // writedata("0100");
  //           // }
  //           // if(recieve=="ELM327 v1.5"){

  //           // writedata('ATL0');
  //           // }
  //           // if(recieve=="ATL0OK>"){
  //           //   writedata('ATE1');
  //           // }
  //           // if(recieve=="ELM327 v1.5"){
  //           //   //writedata('ATL0');
  //           // }

  //           // await c.write(b);
  //           // if (Utf8Codec().decode(value).toString() !=
  //           //     Utf8Codec().decode(b).toString()) {
  //           // } else {
  //           //   await c.write(b);
  //           // }

  //           // if (Utf8Codec().decode(value).toString() !=
  //           //     "ATSP" + num.toString() + 'ok') {
  //           //   if (num < 9) {
  //           //     num++;
  //           //     List<int> b = Utf8Codec().encode('ATSP' + num.toString());
  //           //     print('发送指令');
  //           //     print(Utf8Codec().decode(b).toString());
  //           //     await c.write(b); //发送指令
  //           //   }
  //           // }
  //           setState(() {
  //             formList = formList;
  //           });
  //           print('88888888888888888888888$value');
  //         });
  //       }
  //     }
  //   });
  // }
  int num = 0;
  // startconnetc(index) async {
  //   await device.connect();

  //   setState(() {});

  //   // List<BluetoothService> services = await device.discoverServices();
  //   // services.forEach((service) async {
  //   //   // do something with service
  //   //   var characteristics = service.characteristics;

  //   //   for (BluetoothCharacteristic c in characteristics) {
  //   //     //0000fff2-0000-1000-8000-00805f9b34fb
  //   //     if (c.uuid.toString() == "00002a01-0000-1000-8000-00805f9b34fb") {
  //   //       cwrite = c;
  //   //       print('开始写入');
  //   //       writedata(sendCode);
  //   //     }
  //   //     if (c.uuid.toString() == "0000fff1-0000-1000-8000-00805f9b34fb") {
  //   //       await c.setNotifyValue(true);

  //   //       c.value.listen((value) {
  //   //         var item = formList[index];

  //   //         print('接收值$value');

  //   //         String recieve = Utf8Codec().decode(value).toString().trim();
  //   //         print('接收值转换$recieve');
  //   //         print('当前发送指令$sendCode');
  //   //         item['value'] = '无故障代码';

  //   //         if (sendCode == "ATZ") {
  //   //           if (recieve[0] == "E") {
  //   //             print('ATZ成功');
  //   //             sendCode = "ATL0";
  //   //             writedata(sendCode);
  //   //           } else {
  //   //             writedata(sendCode);
  //   //           }
  //   //         } else if (sendCode == "ATL0") {
  //   //           if (recieve[0] == "A") {
  //   //             print('ATL0成功');
  //   //             print(recieve[4]);
  //   //             sendCode = "ATE1";
  //   //             writedata(sendCode);
  //   //           } else {
  //   //             writedata(sendCode);
  //   //           }
  //   //         } else if (sendCode == "ATE1") {
  //   //           if (recieve[2] == "E") {
  //   //             print('ATE1成功');
  //   //             sendCode = "ATH0";
  //   //             writedata(sendCode);
  //   //           } else {
  //   //             writedata(sendCode);
  //   //           }
  //   //         } else if (sendCode == "ATH0") {
  //   //           if (recieve[2] == "H") {
  //   //             print('ATH0成功');
  //   //             sendCode = "ATSP6";
  //   //             writedata(sendCode);
  //   //           } else {
  //   //             writedata(sendCode);
  //   //           }
  //   //         } else if (sendCode == "ATSP6") {
  //   //           if (recieve.contains('ATSP6')) {
  //   //             sendCode = "0100";
  //   //             writedata(sendCode);
  //   //           }
  //   //         }
  //   //         // else if(sendCode=="0100"){
  //   //         //   if(recieve.contains('4100')){
  //   //         //     sendCode = "03";
  //   //         //      writedata(sendCode);
  //   //         //   }
  //   //         // }else if(sendCode=="03"){
  //   //         //   print('故障代码$recieve');
  //   //         // }
  //   //         if (recieve.contains('41 00')) {
  //   //           sendCode = "03";
  //   //           writedata(sendCode);
  //   //         }
  //   //         if (recieve.contains('43')) {
  //   //           print('检测到故障代码$recieve');
  //   //           var items = {'name': '接收的故障码', 'value': recieve};
  //   //           formList.add(items);
  //   //           setState(() {
  //   //             formList = formList;
  //   //           });
  //   //           // Toast.show('检测到故障代码$recieve', context);
  //   //           List temp_arr_str = recieve.split(' ');
  //   //           print(temp_arr_str[0].toString());
  //   //           print(temp_arr_str[1].toString());
  //   //           String codes = 'P';
  //   //           for (int i = 2; i < temp_arr_str.length; i++) {
  //   //             codes = codes + temp_arr_str[i];
  //   //             if (i % 2 != 0) {
  //   //               codes = codes + ',P';
  //   //             }
  //   //           }
  //   //           print('组装之后的故障码$codes');
  //   //           setState(() {
  //   //             code_string = codes;
  //   //           });
  //   //           // var item = formList[index];
  //   //           // item['value'] = '接收的故障码：' + code_string;
  //   //           // setState(() {
  //   //           //   formList = formList;
  //   //           // });
  //   //           getcodedesc();
  //   //         }

  //   //         // else if (sendCode == "ATSP" + num.toString()) {
  //   //         //   if (recieve.contains('OK')) {
  //   //         //     sendCode = "0100";
  //   //         //     writedata(sendCode);
  //   //         //   } else {
  //   //         //     if (num < 9) {
  //   //         //       num++;
  //   //         //     } else {
  //   //         //       num = 0;
  //   //         //     }
  //   //         //     sendCode = "ATSP" + num.toString();
  //   //         //     writedata(sendCode);
  //   //         //   }

  //   //         //   // if (recieve.length > 3 && recieve[4] == num.toString()) {
  //   //         //   //   print('ATSP1成功');
  //   //         //   //   sendCode = "0100";
  //   //         //   //   writedata(sendCode);
  //   //         //   // } else {
  //   //         //   //   writedata(sendCode);
  //   //         //   // }
  //   //         // } else if (sendCode == "0100") {

  //   //         //   if (recieve.contains("41")) {
  //   //         //     // if (recieve.contains('OK')) {
  //   //         //     print('协议走通，协议为$num');

  //   //         //     // List<int> b =[3];
  //   //         //     // await cwrite.write(b);
  //   //         //    sendCode = '03';

  //   //         //     //  sendCode = "$sendCode";
  //   //         //     writedata(sendCode);
  //   //         //   } else {
  //   //         //     if (num < 9) {
  //   //         //       num++;
  //   //         //     } else {
  //   //         //       num = 0;
  //   //         //     }
  //   //         //     sendCode = "ATSP" + num.toString();
  //   //         //     writedata(sendCode);
  //   //         //   }
  //   //         // } else if (sendCode == "0101") {
  //   //         //   print('------故障代码个数返回值-------$recieve');
  //   //         // } else if (sendCode.contains('03')) {
  //   //         //   print('------故障代码返回值-------$recieve');
  //   //         // }else if (sendCode=='04') {
  //   //         //   print('------清楚故障代码返回值-------$recieve');
  //   //         // }
  //   //         // else if (sendCode=='07') {
  //   //         //   print('------07故障代码返回值-------$recieve');
  //   //         // }
  //   //         //  else if (sendCode == "01") {
  //   //         //   print('------故障代码返回值01-------$recieve');
  //   //         // } else if (sendCode == "0120") {
  //   //         //   //pid20-40
  //   //         //   if (recieve.contains("41")) {
  //   //         //     sendCode = "0140";
  //   //         //     writedata(sendCode);
  //   //         //   } else {
  //   //         //     // //继续查找40断的pid是否支持
  //   //         //     // sendCode = "0140";
  //   //         //     // writedata(sendCode);
  //   //         //   }
  //   //         // } else if (sendCode == "0140") {
  //   //         //   if (recieve.contains("41")) {
  //   //         //     sendCode = "0160";
  //   //         //   }
  //   //         //   writedata(sendCode);
  //   //         // } else if (sendCode == "0160") {
  //   //         //   if (recieve.contains("41")) {
  //   //         //     sendCode = "010D";
  //   //         //   }
  //   //         //   writedata(sendCode);
  //   //         // } else if (sendCode == "010D") {
  //   //         //   print('010D 返回数据$recieve');
  //   //         //   if (recieve.contains("41")) {
  //   //         //     sendCode = "03";
  //   //         //   }
  //   //         //   writedata(sendCode);
  //   //         // }

  //   //         setState(() {
  //   //           formList = formList;
  //   //         });
  //   //       });
  //   //     }
  //   //   }
  //   });
  // }

//漆膜仪连接
  connect() async {
    // flutterBlue.startScan(timeout: Duration(seconds: 30));

    // flutterBlue.scanResults.listen((event) {
    //   for (ScanResult result in event) {
    //     /// 如果设备名字为空不显示
    //     if (result.advertisementData.localName.isEmpty) {
    //       continue;
    //     } else {
    //       print(result.advertisementData.localName);
    //     }

    //     /// 加入设备列表
    //     /// 逻辑实现...
    //   }
    // });
    // flutterBlue.connectedDevices.then((value) => {
    //   print(value)
    // });
    // LoadingPage loadpage = new LoadingPage(context);
    // loadpage.show();

    // flutterBlue.scan().listen((scanresult) {
    //   print(scanresult.device);
    //   print(scanresult.advertisementData.localName);
    //   print('蓝牙名称' + scanresult.device.name);
    //   var rssi = scanresult.rssi;
    //   print('rssi:$rssi');

    //   var udid = scanresult.device.id.toString() ;
    //   String deveceName = scanresult.device.name;
    //   if (startscan == false) {
    //     formList = [];
    //     devices = [];
    //   }
    //   var item = {'name': deveceName, 'value': ''};
    //   formList.add(item);
    //   devices.add(scanresult.device);
    //   setState(() {
    //     formList = formList;
    //     devices = devices;
    //   });
    //   if (deveceName.startsWith('OBD')) {
    //     flutterBlue.stopScan();
    //   }
    //   // if (deveceName.startsWith('OBD')) {
    //   //   // loadpage.close();
    //   //   Future.delayed(Duration(seconds: 0), () {});

    //   //   device = scanresult.device;

    //   //   flutterBlue.stopScan();
    //   // } else {
    //   //   //Toast.show('正在重新扫描设备', context);
    //   // }
    // });
  }

  //}

  @override
  Widget build(BuildContext context) {
    // TODO: implement build
    return new Scaffold(
      appBar: new AppBar(
        title: new Text('蓝牙'),
        backgroundColor: Colors.white,
        elevation: 0,
      ),
      floatingActionButtonLocation: FloatingActionButtonLocation.endFloat,
      floatingActionButton: FloatingActionButton(
        onPressed: () {
          //change();
          // if (startscan == false) {
          //   connect();
          //   setState(() {
          //     startscan = true;
          //   });
          // } else {
          //   flutterBlue.stopScan();
          //   device.disconnect();
          //   setState(() {
          //     startscan = false;
          //   });
          // }
        },
        child: Icon(
          Icons.add,
          color: Colors.white,
        ),
        backgroundColor: Color.fromRGBO(27, 182, 251, 1),
      ),
      body: new ListView(
        children: <Widget>[buildcontent()],
      ),
    );
  }
}
